package com.hjr.leetcode.question100;

/**
 *27. 移除元素
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
 *
 * 假设 nums 中不等于 val 的元素数量为 k，要通过此题，您需要执行以下操作：
 *
 * 更改 nums 数组，使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
 * 返回 k。
 */
public class q27 {

    public static void main(String[] args) {
        System.out.println(removeElement(new int[]{3, 2, 2, 3}, 3));
    }

    // 0ms 41mb 双指针 左指针固定为开头，右指针固定为长度，每次找到相等val的元素就自减
    public static int removeElement(int[] nums, int val) {
        if (nums == null || nums.length == 0){
            return 0;
        }
        int l = 0, r = nums.length;
        while (l < r){
            if (nums[l] == val){
                int j = l;
                while (j + 1 < r){
                    nums[j] = nums[j + 1];
                    j++;
                }
                r--;
            }else {
                l++;
            }
        }
        return r;
    }
}
